auto merge of #216 : alexcrichton/cargo/issue-205, r=wycats
authorbors <bors@rust-lang.org>
Sat, 19 Jul 2014 01:08:05 +0000 (01:08 +0000)
committerbors <bors@rust-lang.org>
Sat, 19 Jul 2014 01:08:05 +0000 (01:08 +0000)
commit46c23d8495b9599384df56b93dc093cb81698b42
tree7447ac1385b5a5f658208e33fecd340b44542105
parent65ff8ada78ba5c4c5ed65a3d6e3287ccb5e59fb1
parentc2b23512d55424fa7b695b6160539937a5e31121
auto merge of #216 : alexcrichton/cargo/issue-205, r=wycats

As discovered in #205, cargo wasn't properly ensuring a fresh build state for new builds. As commented in #205, this is an easy way to have a non deterministic build which is one of cargo's major goals to avoid. These commits rectify the situation.

All build output is now "obliterated" by moving to a location unknown to the compiler as soon as a build starts. All fresh output is moved back into place automatically, and all dirty output will only have known artifacts available to it.

The major consequence of this strategy is that the location of the output of the `build` command must also change. Instead of spraying into a shared directory, build commands are now contained to their own build directory which is entirely removed on rebuild or entirely preserved on a fresh build. There's more documentation in the new `layout.rs` about the build directory structure.

In general this should not have much impact as a user-facing change.